网络爬虫, Python和数
分析
王澎
中国科技大学
什么是网络爬
网络爬虫是一个自动提取网页的程序,它为搜
引擎从万维网上下载网页,是搜索引擎的重要
成。传统爬虫从个或若干初始网页URL始,
获得初始网页上的URL,在抓取网页的过程中
不断从当前页面上抽取新的URL放入队,直到满
足系统的一定停止条件
爬虫有什么用
做为通用搜索引擎网页收集器。google,baidu
做垂直搜索引擎.(找工作的搜索引擎:
www.deepdo.com,数据来源于:www.51job.com ,
www.zhaoping.com , www.chinahr.com 等等)
科学研究:在线人类行为,在线社群演化,人
动力学研究,计社会学,复杂网络,数据挖掘,
等领域的实证研究都需要大量数据,网络爬虫
收集相关数据的利器。
偷窥,hacking,发垃圾邮……(《google
hack.
爬虫是搜引擎的第一步
也是最容的一
网页搜集
建立索引
查询排序
用什么语言写爬虫
CC++。高效率,快速,适合通用搜索引
擎做全网爬取。缺点,开发慢,写起来又
臭又长,例如:天网搜索源代码。
脚本语言:Perl, Python, Java, Ruby。简单,
易学,良好的文本处理能方便网页内容的
细致提取,但效率往往不高,适合对少量
网站的聚焦爬取
C#?(貌似信息管理的人比较喜欢的语言
我曾经用来写过爬虫的
Perl: 古老的脚本语言,hack 语言,被用来写爬虫
有着悠久的历史,因此,书本支持相当丰富:
spidering hacks》,《Perl & LWP》;强大的文
本处理能力,数库支持能力。缺点:有点怪异。
Python:相对年轻一点的语言。对于爬虫来说
方面能力还行,并且还在完善中,没有Perl那样
专门的爬虫书籍,不过网上能搜到一些文章。
为什么最终选Python
跨平台,对Linuxwindows都有不错的支持。
科学计算,数值拟合:NumpyScipy
可视化:2dMatplotlib(图很漂亮), 3d: Mayavi2
复杂网络:Networkx
统计:与R语言接口:Rpy
交互式终端
网站的快速开发?
从一个简单的Python爬虫开始
说明加说明语句时要注意#需要英文编码里的,而不能是中文输入法中的#号,所
以添加中文说明时先在英文输入法下打入#号后再切换到中文输入
………
瀚海Pie 的网页部分代
Pie版的Html树部结构
利用BeautifulSoup剖析
FindAll()是最便最好用的函
页面中的link
通用搜索策略
深度优先
广度优先
现实中的策略是多种多
因为瀚海星云link有很简单的规律,每页递减20,所以利用这个规
律设置每次赋入的URL,这样爬完了PIE版所有帖子
运行结果
有乱
码!!
爬取中文网页常有的问题:不规
格的编码模式
解决方法:编码转换
最后的结
Perfect!
请温柔的对待瀚海星云
设置延迟时间(对于一个论坛,如果假设一
个真实的浏览者每10秒翻开一个新的网页的
话,一个不延时爬虫每秒可以抓10个网页,
这样一个爬虫相当于占用了100个人的带
宽!)
在午夜爬取可以适当加快速度
道上的规矩:
Mysql存储数据
先要在自己数据里建立一个空的表,这里,
这里我已经建立了一个名为lilybbs的数据库
表名为hunan_a
导入相应的模块
与相应的数据库连接
写入
数据库里的结
统计和做
这部分主要用于科研方
面,利用爬取到的数据
做一些简单的统计工作
右图是某论坛的回复网
络,使用python
networkx包做的。
Pylab
matplotlib
图包的一部
左图是某
blog四年间
每天发表文
章的数量
左一是某blog网站每个blog
评论数的统计,xblog
论数量,y是有这样数量的
blog的数量。可以看到是标
准的“power-law分布,幂
指数为-1.2左右,拟合使用
Scipy包的optimize.leastsq,
函数,具体可见scipy
cookbook页面的fitting data
一栏
左二是blogcomment
networks 的入度与出度的散
点图,也就是每个点的坐
xy分别代表某个人获
得的评论和发出的评论数。
颜色代表这样点的数量。
本图使用了matplotlib中的
hexbin函数
高级主题一):编写更健壮的爬
伪装成浏
览器
容错
高级主题(二):由内嵌脚本产生
的动态网页的爬取
如何爬取
像左图这
样的网页
呢?
它显示的
内容并不
会呈现在
html文件
里。
高级主题(三):SQLAlchemy
当你越关注性能,就会发现 SQL 数据库离对象集合越来越远;当你越关
注抽象,就会发现对象集合离表和行这些概念越来越远。SQLAlchemy
致力于尽量包容这两个世界。
SQLAlchemy 并不把数据库简单地视为数据表的集合;它把它们看作是
系代数引擎。它的关系对象映射能够让类以不同的方式映射到数据库。
SQL 工具包也不光能够对数据表进行 select 操作——你还能对连接、子查
询和联合进行 select。这样数据库关系和领域对象模型之间的耦合从一开
始就得以很好地解开,使得两个领域都得以发挥其各自的极致。
Mysql这样关系型数据库的缺点:在表
示复杂网络这样一对多,和多对
的关系时,非常冗余;一旦需要
比较复杂的统计,sql语句会变得
常复杂。
我写过的某个繁琐的调用
号称能更简洁明了的SQLAlchemy会成为
mysql的替代品么?
高级主题(四):统计利器R语言
求方差,聚类,判
别,拟合,团簇探
测,时间序列分析,
生存分析,甚至复
杂网络,这些R语言
里都有很好的函数
可以直接使用R语言,
也可以利用Rpy
python里面调用R
函数,不过Rpy仍然
开发中,还不是很
成熟
曾经我们获取数据的手段
我们用望远镜来洞察宇宙
昂贵的实
只是为了获取大自然的数据
Internet 给我们了海量的数据
善用数据,了解我们自己
浩瀚的比特海是另一片未知的星
谢谢大家